Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / ui / common / components / ScannedQrCodeDialog.kt

Displaying Raw • Download

app/src/main/java/com/geeksville/mesh/ui/common/components/ScannedQrCodeDialog.kt ui_message_list (be3f882f) Text, 13.55 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787com.geeksville.mesh.ui.common.components

Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.ExperimentalLayoutApi
Tff7b72import T7ee787androidx.compose.foundation.layout.FlowRow
Tff7b72import T7ee787androidx.compose.foundation.layout.PaddingValues
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.height
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.widthIn
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyColumn
Tff7b72import T7ee787androidx.compose.foundation.lazy.itemsIndexed
Tff7b72import T7ee787androidx.compose.foundation.shape.RoundedCornerShape
Tff7b72import T7ee787androidx.compose.material3.ButtonDefaults
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.OutlinedButton
Tff7b72import T7ee787androidx.compose.material3.Surface
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TextButton
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateListOf
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.res.stringResource
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.PreviewScreenSizes
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.window.Dialog
Tff7b72import T7ee787androidx.compose.ui.window.DialogProperties
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787com.geeksville.mesh.AppOnlyProtos.ChannelSet
Tff7b72import T7ee787com.geeksville.mesh.ConfigProtos.Config.LoRaConfig.ModemPreset
Tff7b72import T7ee787com.geeksville.mesh.R
Tff7b72import T7ee787com.geeksville.mesh.channelSet
Tff7b72import T7ee787com.geeksville.mesh.copy
Tff7b72import T7ee787com.geeksville.mesh.model.Channel
Tff7b72import T7ee787com.geeksville.mesh.model.UIViewModel
Tff7b72import T7ee787com.geeksville.mesh.ui.settings.radio.components.ChannelSelection

Tf0883e@Composable
Tff7b72fun Td2a8ffScannedQrCodeDialogTb4b4b4(Te6edf3viewModelTb4b4b4: Te6edf3UIViewModelTb4b4b4, Te6edf3incomingTb4b4b4: Te6edf3ChannelSetTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3channels Tff7b72by Te6edf3viewModelTb4b4b4.Te6edf3channelsTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)

Te6edf3ScannedQrCodeDialogTb4b4b4(
Te6edf3channels Tff7b72= Te6edf3channelsTb4b4b4,
Te6edf3incoming Tff7b72= Te6edf3incomingTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3viewModelTff7b72::Te6edf3clearRequestChannelUrlTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3viewModelTff7b72::Te6edf3setChannelsTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e/** Enables the user to select which channels to accept after scanning a QR code. */
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalLayoutApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffScannedQrCodeDialogTb4b4b4(
Te6edf3channelsTb4b4b4: Te6edf3ChannelSetTb4b4b4,
Te6edf3incomingTb4b4b4: Te6edf3ChannelSetTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onConfirmTb4b4b4: Tb4b4b4(Te6edf3ChannelSetTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3shouldReplace Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Te6edf3incomingTb4b4b4.Te6edf3hasLoraConfigTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}

Tff7b72val Te6edf3channelSet Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3shouldReplaceTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Tb4b4b4{
Te6edf3incomingTb4b4b4.Te6edf3copy Tb4b4b4{ Te6edf3loraConfig Tff7b72= Te6edf3loraConfigTb4b4b4.Te6edf3copy Tb4b4b4{ Te6edf3configOkToMqtt Tff7b72= Te6edf3channelsTb4b4b4.Te6edf3loraConfigTb4b4b4.Te6edf3configOkToMqtt Tb4b4b4} Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3channelsTb4b4b4.Te6edf3copy Tb4b4b4{
T8b949e// To guarantee consistent ordering, using a LinkedHashSet which iterates through
T8b949e// its entries according to the order an item was *first* inserted.
T8b949e// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-linked-hash-set/
Tff7b72val Te6edf3result Tff7b72= Te6edf3LinkedHashSetTb4b4b4(Te6edf3settings Tff7b72+ Te6edf3incomingTb4b4b4.Te6edf3settingsListTb4b4b4)
Te6edf3settingsTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Te6edf3settingsTb4b4b4.Te6edf3addAllTb4b4b4(Te6edf3resultTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72val Te6edf3modemPresetName Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3loraConfig Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3loraConfigTb4b4b4)Tb4b4b4.Te6edf3name

T8b949e/* Holds selections made by the user */
Tff7b72val Te6edf3channelSelections Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3channelSetTb4b4b4) Tb4b4b4{ Te6edf3mutableStateListOfTb4b4b4(Te6edf3elements Tff7b72= Te6edf3ArrayTb4b4b4(Te6edf3size Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3settingsCountTb4b4b4, Tff7b72init Tff7b72= Tb4b4b4{ Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4) Tb4b4b4}

Tff7b72val Te6edf3selectedChannelSet Tff7b72=
Te6edf3channelSetTb4b4b4.Te6edf3copy Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3settingsTb4b4b4.Te6edf3filterIndexed Tb4b4b4{ Te6edf3iTb4b4b4, Te6edf3_ Tff7b72-Tff7b72> Te6edf3channelSelectionsTb4b4b4.Te6edf3getOrNullTb4b4b4(Te6edf3iTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tb4b4b4}
Te6edf3settingsTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Te6edf3settingsTb4b4b4.Te6edf3addAllTb4b4b4(Te6edf3resultTb4b4b4)
Tb4b4b4}

T8b949e// Compute LoRa configuration changes when in replace mode
Tff7b72val Te6edf3loraChanges Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3shouldReplaceTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3incomingTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldReplace Tff7b72&Tff7b72& Te6edf3incomingTb4b4b4.Te6edf3hasLoraConfigTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3current Tff7b72= Te6edf3channelsTb4b4b4.Te6edf3loraConfig
Tff7b72val Te6edf3new Tff7b72= Te6edf3incomingTb4b4b4.Te6edf3loraConfig
Tff7b72val Te6edf3changes Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)

Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3hopLimit Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3hopLimitTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffHop Limit: Tffd700${Te6edf3currentTb4b4b4.Te6edf3hopLimitTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3hopLimitTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3getRegionTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3getRegionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentRegionDesc Tff7b72= Te6edf3currentTb4b4b4.Te6edf3getRegionTb4b4b4(Tb4b4b4)Tff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72val Te6edf3newRegionDesc Tff7b72= Te6edf3newTb4b4b4.Te6edf3getRegionTb4b4b4(Tb4b4b4)Tff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffRegion: Tffd700$Te6edf3currentRegionDescTa5d6ff -> Tffd700$Te6edf3newRegionDescTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3modemPreset Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3modemPresetTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentPresetDesc Tff7b72= Te6edf3ModemPresetTb4b4b4.Te6edf3forNumberTb4b4b4(Te6edf3currentTb4b4b4.Te6edf3modemPresetTb4b4b4.Te6edf3numberTb4b4b4)Tff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72val Te6edf3newPresetDesc Tff7b72= Te6edf3ModemPresetTb4b4b4.Te6edf3forNumberTb4b4b4(Te6edf3newTb4b4b4.Te6edf3modemPresetTb4b4b4.Te6edf3numberTb4b4b4)Tff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffModem Preset: Tffd700$Te6edf3currentPresetDescTa5d6ff -> Tffd700$Te6edf3newPresetDescTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3usePreset Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3usePresetTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffUse Preset: Tffd700${Te6edf3currentTb4b4b4.Te6edf3usePresetTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3usePresetTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3txEnabled Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3txEnabledTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffTransmit Enabled: Tffd700${Te6edf3currentTb4b4b4.Te6edf3txEnabledTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3txEnabledTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3txPower Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3txPowerTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffTransmit Power: Tffd700${Te6edf3currentTb4b4b4.Te6edf3txPowerTffd700}Ta5d6ffdBm -> Tffd700${Te6edf3newTb4b4b4.Te6edf3txPowerTffd700}Ta5d6ffdBmTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3channelNum Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3channelNumTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffChannel Number: Tffd700${Te6edf3currentTb4b4b4.Te6edf3channelNumTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3channelNumTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3bandwidth Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3bandwidthTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffBandwidth: Tffd700${Te6edf3currentTb4b4b4.Te6edf3bandwidthTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3bandwidthTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3codingRate Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3codingRateTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffCoding Rate: Tffd700${Te6edf3currentTb4b4b4.Te6edf3codingRateTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3codingRateTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3spreadFactor Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3spreadFactorTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffSpread Factor: Tffd700${Te6edf3currentTb4b4b4.Te6edf3spreadFactorTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3spreadFactorTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3sx126XRxBoostedGain Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3sx126XRxBoostedGainTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffRX Boosted Gain: Tffd700${Te6edf3currentTb4b4b4.Te6edf3sx126XRxBoostedGainTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3sx126XRxBoostedGainTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3overrideFrequency Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3overrideFrequencyTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffOverride Frequency: Tffd700${Te6edf3currentTb4b4b4.Te6edf3overrideFrequencyTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3overrideFrequencyTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTb4b4b4.Te6edf3ignoreMqtt Tff7b72!Tff7b72= Te6edf3newTb4b4b4.Te6edf3ignoreMqttTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffIgnore MQTT: Tffd700${Te6edf3currentTb4b4b4.Te6edf3ignoreMqttTffd700}Ta5d6ff -> Tffd700${Te6edf3newTb4b4b4.Te6edf3ignoreMqttTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}

Te6edf3changes
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3emptyListTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3DialogTb4b4b4(
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{ Te6edf3onDismissTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3properties Tff7b72= Te6edf3DialogPropertiesTb4b4b4(Te6edf3usePlatformDefaultWidth Tff7b72= Tff7b72falseTb4b4b4, Te6edf3dismissOnBackPress Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3SurfaceTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthInTb4b4b4(Te6edf3max Tff7b72= T79c0ff6T79c0ff0T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3shape Tff7b72= Te6edf3RoundedCornerShapeTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3backgroundTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3LazyColumnTb4b4b4(
Te6edf3contentPadding Tff7b72= Te6edf3PaddingValuesTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3id Tff7b72= Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3new_channel_rcvdTb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3itemsIndexedTb4b4b4(Te6edf3channelSetTb4b4b4.Te6edf3settingsListTb4b4b4) Tb4b4b4{ Te6edf3indexTb4b4b4, Te6edf3channel Tff7b72-Tff7b72>
Tff7b72val Te6edf3channelObj Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3channelTb4b4b4, Te6edf3channelSetTb4b4b4.Te6edf3loraConfigTb4b4b4)
Te6edf3ChannelSelectionTb4b4b4(
Te6edf3index Tff7b72= Te6edf3indexTb4b4b4,
Te6edf3title Tff7b72= Te6edf3channelTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3ifEmpty Tb4b4b4{ Te6edf3modemPresetName Tb4b4b4}Tb4b4b4,
Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3isSelected Tff7b72= Te6edf3channelSelectionsTff7b72[Te6edf3indexTff7b72]Tb4b4b4,
Te6edf3onSelected Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657it Tff7b72|Tff7b72| Te6edf3selectedChannelSetTb4b4b4.Te6edf3settingsCount Tff7b72> T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3channelSelectionsTff7b72[Te6edf3indexTff7b72] Tff7b72= Tffa657it
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelObjTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// Display LoRa configuration changes when in replace mode
Tff7b72if Tb4b4b4(Te6edf3shouldReplace Tff7b72&Tff7b72& Te6edf3loraChangesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ffLoRa Configuration Changes:Ta5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3top Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3bottom Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4,
Tb4b4b4)
Te6edf3loraChangesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3change Tff7b72-Tff7b72>
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ff• Tffd700$Te6edf3changeTa5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3start Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3bottom Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3item Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3vertical Tff7b72= T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3selectedColors Tff7b72= Te6edf3ButtonDefaultsTb4b4b4.Te6edf3buttonColorsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3unselectedColors Tff7b72=
Te6edf3ButtonDefaultsTb4b4b4.Te6edf3outlinedButtonColorsTb4b4b4(Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4)

Te6edf3OutlinedButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3shouldReplace Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3colors Tff7b72= Tff7b72if Tb4b4b4(Tff7b72!Te6edf3shouldReplaceTb4b4b4) Te6edf3selectedColors Tff7b72else Te6edf3unselectedColorsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3addTb4b4b4)Tb4b4b4)
Tb4b4b4}

Te6edf3OutlinedButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3shouldReplace Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3incomingTb4b4b4.Te6edf3hasLoraConfigTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3colors Tff7b72= Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Te6edf3selectedColors Tff7b72else Te6edf3unselectedColorsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replaceTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e/* User Actions via buttons */
Te6edf3item Tb4b4b4{
Te6edf3FlowRowTb4b4b4(
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onDismissTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3id Tff7b72= Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancelTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3TextButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onConfirmTb4b4b4(Te6edf3selectedChannelSetTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3selectedChannelSetTb4b4b4.Te6edf3settingsCount Tff7b72in T79c0ff1.Tb4b4b4.T79c0ff8Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3id Tff7b72= Te6edf3RTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3acceptTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@PreviewScreenSizes
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffScannedQrCodeDialogPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ScannedQrCodeDialogTb4b4b4(
Te6edf3channels Tff7b72=
Te6edf3channelSet Tb4b4b4{
Te6edf3settingsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settingsTb4b4b4)
Te6edf3loraConfig Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfig
Tb4b4b4}Tb4b4b4,
Te6edf3incoming Tff7b72=
Te6edf3channelSet Tb4b4b4{
Te6edf3settingsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settingsTb4b4b4)
Te6edf3loraConfig Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfig
Tb4b4b4}Tb4b4b4,
Te6edf3onDismiss Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onConfirm Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.15s